import {showToast} from '../common/util.js';

// 页面装修 -- 表名
const COLLECTION_NAME = "me-page-design"
// api请求成功的状态码
const CODE_SUCCESS = 200

// 页面装修 -- 基础API
export function apiDesign(method, param, config) {
	return apiBase(COLLECTION_NAME, method, param, config)
}


/*
api基础请求
@name 云函数名
@method 方法名
@param 方法参数
@config 配置:
 showErr: true, // 是否提示业务异常: 默认true
 resAll: false, // 成功回调原始数据, 默认返回res.result.data
*/
function apiBase(name, method, param, config) {
	return new Promise((resolve, reject) => {
		config = config || {}
		// 指定时间未响应,则显示进度条
		const loadTime = 1000
		let isShowLoading = false
		const loadTimeout = setTimeout(()=>{
			isShowLoading = true
			uni.showLoading()
		}, loadTime)
		// 统一带参
		if(!param) param = {}
		// 发送请求
		uniCloud.callFunction({
			name,
			data: {method, param}
		}).then(xhr => {
			clearTimeout(loadTimeout)
			isShowLoading && uni.hideLoading()
			let res = xhr.result; // 原始数据 {"code":200, "msg": "成功", "data": {}}
			let code = res.code; // 状态码
			console.log(`请求模块:${name} ----> 方法:${method} ----> 参数:${JSON.stringify(param)} ----> 响应成功:${JSON.stringify(res)}`);
			if (code == CODE_SUCCESS) {
				if(config.resAll){
					resolve(res); // 成功回调原始数据,不处理
				}else{
					resolve(res.data); // 成功回调
				}
			}else {
				// 是否提示异常
				if(config.showErr != false) showToast(res.msg)
				// 业务异常回调
				reject(res)
			}
		}).catch(e=>{
			clearTimeout(loadTimeout)
			isShowLoading && uni.hideLoading()
			console.log(`请求模块:${name} ----> 方法:${method} ----> 参数:${JSON.stringify(param)} ----> 响应异常:${JSON.stringify(e)}`);
			e.msg = e.message
			if(config.showErr != false) showToast(e.msg)
			reject(e)
		})
	})
}